package control;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

import model.bean.Agente;
import model.bean.GrupoUsuario;
import model.bean.Usuario;
import model.bo.AgenteBO;
import model.bo.GrupoUsuarioBO;
import model.bo.UsuarioBO;
import apresentacao.GerentePagina;
import apresentacao.GerenteValidacao;
import enumerador.ModosVisao;

public class LoginCadastroMB extends GerentePagina implements Serializable {

	private static final long serialVersionUID = -8793536696664261360L;

	private Usuario usuario = new Usuario();
	private UsuarioBO usuarioBO = new UsuarioBO();
	private GrupoUsuarioBO grupoUsuarioBO = new GrupoUsuarioBO();
	private AgenteBO agenteBO = new AgenteBO();
	private GrupoUsuario grupo = new GrupoUsuario();
	private Agente agente = new Agente();
	private List<Agente> agentes;

	public String inclusao() {
		usuario = new Usuario();
		setVisao(ModosVisao.INCLUSAO);
		return "loginCadastro";
	}

	public void incluir() {
		try {
			grupo = grupoUsuarioBO.consultar(grupo);
			usuario.setGrupoUsuario(grupo);
			usuario.setAgente(agente.getId());
			usuario = usuarioBO.incluir(usuario);
		} catch (Exception e) {
			e.printStackTrace();
			GerenteValidacao.mensagemErroIncluir();
		}
		setVisao(ModosVisao.INCLUIR);
		GerenteValidacao.mensagemIncluir();
	}

	public void edicao() {
		try {
			usuario = usuarioBO.consultar(usuario);
		} catch (Exception e) {
			e.printStackTrace();
		}
		setVisao(ModosVisao.EDICAO);
	}

	public void salvar() {
		try {
			grupo = grupoUsuarioBO.consultar(grupo);
			usuario.setGrupoUsuario(grupo);
			usuario.setAgente(agente.getId());
			usuarioBO.salvar(usuario);
		} catch (Exception e) {
			e.printStackTrace();
			GerenteValidacao.mensagemErroAlterar();
		}
		setVisao(ModosVisao.SALVAR);
		GerenteValidacao.mensagemAlterar();
	}

	public void excluir() {
		try {
			usuarioBO.excluir(usuario);
		} catch (Exception e) {
			e.printStackTrace();
			GerenteValidacao.mensagemErroExcluir();
		}
		setVisao(ModosVisao.INCLUSAO);
		usuario = new Usuario();
		GerenteValidacao.mensagemExcluir();
	}

	// List

	public List<SelectItem> getGruposUsuario() {
		List<SelectItem> resultado = new ArrayList<SelectItem>();
		resultado.add(new SelectItem(-1, "Selecione"));
		List<GrupoUsuario> grupos = grupoUsuarioBO.getGruposUsuario();
		for (GrupoUsuario grupoUsuario : grupos) {
			SelectItem item = new SelectItem(grupoUsuario.getId(), grupoUsuario.getNome());
			resultado.add(item);
		}
		return resultado;
	}
	
	public List<SelectItem> getAgentes() {
		List<SelectItem> resultado = new ArrayList<SelectItem>();

		if(agentes != null){
			for (Agente agente : agentes) {
				SelectItem item = new SelectItem(agente.getId(), agente.getNome());
				resultado.add(item);
			}
		}
		return resultado;
	}

	// Gets e Sets

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public GrupoUsuario getGrupo() {
		return grupo;
	}

	public void setGrupo(GrupoUsuario grupo) {
		this.grupo = grupo;
	}

	public void carregarAgentes(ValueChangeEvent event){
		Long id = (Long) event.getNewValue();
		if(id != null && id > 0){
			GrupoUsuario grupo = new GrupoUsuario();
			grupo.setId(id);
			grupo = grupoUsuarioBO.consultar(grupo);
			this.agentes = agenteBO.getAgentes(grupo.getNome());
		}else{
			this.agentes = new ArrayList<Agente>();
		}
	}

	public Agente getAgente() {
		return agente;
	}

	public void setAgente(Agente agente) {
		this.agente = agente;
	}
	
	

}
